package uttype

import "math/rand"

type List []interface{}

// SliceHas
// @Description: 判断切片是否包含某元素
// @param list
// @param value
// @return bool
func SliceHas(list List, value interface{}) bool {
	for _, v := range list {
		if v == value {
			return true
		}
	}
	return false
}

// SliceStringHas
// @Description: 判断切片是否包含某元素
// @param list
// @param value
// @return bool
func SliceStringHas(list []string, value string) bool {
	for _, v := range list {
		if v == value {
			return true
		}
	}
	return false
}

// SliceRandomOne
// @Description: 随机一个元素
// @param list
// @return interface{}
func SliceRandomOne(list List) interface{} {
	if len(list) <= 0 {
		return nil
	}
	return list[rand.Intn(len(list))]
}

// SliceStringDelItem
// @Description: 切片删除一个元素
// @param vs
// @param item
// @return []string
func SliceStringDelItem(vs []string, item string) []string {
	for i := 0; i < len(vs); i++ {
		if item == vs[i] {
			vs = append(vs[:i], vs[i+1:]...)
			i = i - 1
		}
	}
	return vs
}

// SliceStringDelItems
// @Description: 切片删除多个元素
// @param vs
// @param items
// @return []string
func SliceStringDelItems(vs []string, items []string) []string {
	dMap := make(map[string]bool)
	for _, s := range items {
		dMap[s] = true
	}

	for i := 0; i < len(vs); i++ {
		if _, ok := dMap[vs[i]]; ok {
			vs = append(vs[:i], vs[i+1:]...)
			i = i - 1
		}
	}
	return vs
}
